package com.example.gpsparse.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

/**
 * 高德地图API响应模型
 */
@Data
public class AmapResponse {
    
    /**
     * 返回状态，1表示成功，0表示失败
     */
    private String status;
    
    /**
     * 返回结果数目
     */
    private String count;
    
    /**
     * 返回状态说明
     */
    private String info;
    
    /**
     * 返回状态码
     */
    @JsonProperty("infocode")
    private String infoCode;
    
    /**
     * 逆地理编码结果
     */
    private ReGeocode regeocode;
    
    /**
     * 判断请求是否成功
     */
    public boolean isSuccess() {
        return "1".equals(status);
    }
    
    /**
     * 逆地理编码结果
     */
    @Data
    public static class ReGeocode {
        
        /**
         * 格式化地址
         */
        @JsonProperty("formatted_address")
        private String formattedAddress;
        
        /**
         * 地址组成要素
         */
        private AddressComponent addressComponent;
    }
    
    /**
     * 地址组成要素
     */
    @Data
    public static class AddressComponent {
        
        /**
         * 省份
         */
        private String province;
        
        /**
         * 城市
         */
        private String city;
        
        /**
         * 区县
         */
        private String district;
        
        /**
         * 街道
         */
        private String township;
        
        /**
         * 社区
         */
        private String neighborhood;
        
        /**
         * 街道信息
         */
        private StreetInfo street;
    }
    
    /**
     * 街道信息
     */
    @Data
    public static class StreetInfo {
        
        /**
         * 街道名称
         */
        private String[] street;
        
        /**
         * 门牌号
         */
        private String[] number;
        
        /**
         * 获取完整街道名称
         */
        public String getFullStreet() {
            if (street != null && street.length > 0) {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < street.length; i++) {
                    sb.append(street[i]);
                    if (number != null && i < number.length) {
                        sb.append(number[i]);
                    }
                    if (i < street.length - 1) {
                        sb.append(", ");
                    }
                }
                return sb.toString();
            }
            return "";
        }
    }
}